package modele;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

/**
 * 
 * @author Florence Delrieu & Coralie Micouin
 * 
 */
public class Balade {

	private ArrayList<Noeud> noeuds;
	private ArrayList<Terme> termes;
	private ArrayList<Docs> documents;
	private int longueurMoyNoeud;
	// On stocke dans la balade la liste des mots de chaque titre et sous titre.
	// Les titres et sous titres sont identifies par leur xPath, c'est la cle
	// dans les maps
	private Map<String, List<String>> mapTitres;
	private Map<String, List<String>> mapSsTitres;

	public Balade() {
		this.noeuds = new ArrayList<Noeud>();
		this.termes = new ArrayList<Terme>();
		this.documents = new ArrayList<Docs>();
		this.longueurMoyNoeud = 0;
		mapTitres = new HashMap<String, List<String>>();
		mapSsTitres = new HashMap<String, List<String>>();
	}

	public ArrayList<Noeud> getNoeuds() {
		return noeuds;
	}

	public void setNoeuds(ArrayList<Noeud> noeuds) {
		this.noeuds = noeuds;
	}

	public ArrayList<Terme> getTermes() {
		return termes;
	}

	public void setTermes(ArrayList<Terme> termes) {
		this.termes = termes;
	}

	public ArrayList<Docs> getDocuments() {
		return documents;
	}

	public void setDocuments(ArrayList<Docs> arrayList) {
		this.documents = arrayList;
	}

	public int getLongueurMoyNoeud() {
		if (this.longueurMoyNoeud == 0) {
			this.calculeLongueurMoyNoeud();
		}
		return this.longueurMoyNoeud;
	}

	public void calculeLongueurMoyNoeud() {
		int sommeLongueurs = 0;
		for (Noeud noeud : noeuds) {
			sommeLongueurs += noeud.getLongueur();
		}
		this.longueurMoyNoeud = sommeLongueurs / noeuds.size();
	}

	public Map<String, List<String>> getMapTitres() {
		return mapTitres;
	}

	public void setMapTitres(Map<String, List<String>> mapTitres2) {
		this.mapTitres = mapTitres2;
	}

	public Map<String, List<String>> getMapSsTitres() {
		return mapSsTitres;
	}

	public void setMapSsTitres(Map<String, List<String>> mapSsTitres2) {
		this.mapSsTitres = mapSsTitres2;
	}

	public void afficher() {

		// On affiche les noeuds
		System.out.println("\n****** Noeuds ******");
		for (Noeud noeud : this.noeuds) {
			System.out.println("  Noeud " + noeud.getIdNoeud()
					+ " (Document : " + noeud.getIdDocument()
					+ ") de longueur " + noeud.getLongueur());
		}

		// On affiche les termes
		System.out.println("\n******Termes ******");
		for (Terme terme : termes) {
			System.out.println("  " + terme.getTerme() + " (id = "
					+ terme.getIdTerme() + " ; positions : "
					+ terme.getPositions() + " ; frequences : "
					+ terme.getFrequences() + ")");
		}

		System.out.println("\n\n\n****** Termes bizarres ******");
		String patternMot = "([\\p{Alnum}çßãõñáéíóèàùâêîôûäëïöüÿ])+";
		for (Terme terme : termes) {
			if (!Pattern.matches(patternMot, terme.getTerme())) {
				System.out.println("  "
						+ terme.getTerme()
						+ " (id = "
						+ terme.getIdTerme()
						+ " ; positions : "
						+ terme.getPositions()
						+ " ; frequences : "
						+ terme.getFrequences()
						+ " ; document : "
						+ this.noeuds.get(terme.getIdNoeuds().get(0))
								.getIdDocument() + ")");
			}
		}
	}

}
